﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace Tron.Players.Search
{
    interface IHeuristic
    {
        /** <summary>Evaluates the board (at the specified depth) in terms of the
         * agentLoc, opponentLoc, percepts and actions.  The evaluation returns a 
         * double between -1 and 1 that represents the "goodness" of the board, where
         * 1 is good for the agent and -1 is good for the opponent.s
         * 
         * This function should return -1 if the game is in a terminal state in which the
         * opponent wins, 1 if the game is in a terminal state in which the agent wins and 0 if
         * the game is in a terminal state in which there is a tie.
         * </summary>
         * <param name="board">a two-dimensional array specifying the state of the board.</param>
         * <param name="depth">the depth in the search tree of this state.</param>
         * <param name="agentLoc">the location of the agent on the board.</param>
         * <param name="opponentLoc">the location of the opponent on the board.</param>
         */
        double Evaluate(int[,] board, int depth, Vector2 agentLoc, Vector2 opponentLoc, bool opponentAlive);
    }
}
